package com.example.theoretical_verification.collection;

import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;

import java.util.Collections;
import java.util.HashSet;

public class MyHashSet03 {
    public static void main(String[] args) {
        HashSet<Student02> hashSet = new HashSet<>();

        // 添加元素
        Student02 s = new Student02("E", 12);
        hashSet.add(s);
        Student02 s1 = new Student02("B", 23);
        hashSet.add(s1);
        Student02 s2 = new Student02("D", 25);
        hashSet.add(s2);
        Student02 s3 = new Student02("A", 35);
        hashSet.add(s3);
        Student02 s4 = new Student02("C", 15);
        hashSet.add(s4);
        Student02 s5 = new Student02("A", 21);
        hashSet.add(s5);

        // 验证内容二：hashset是否会自定义类类型的元素排自然顺序
        System.out.println(hashSet);
        //打印出来的结果和add的顺序不一样，这表明是存取无序的
        //打印出来的结果也不是按照name或者age或升序、或降序排列，这表明对于自定义的类型，HashSet没有帮我自动排序

        for (Student02 o : hashSet){
            System.out.println(o);
        }

        // Student02增加了Comparable接口实现时候的打印结果
        // 看来实现Comparable这个接口，并不报错，但是也没有起到按照名字排序的作用。
        // 另外我实际试验过了，即使注释掉Student02的对于Comparable接口的实现，打印出来的额顺序还是AABDEC，这充分说明，Student02实不实现那个接口，没有任何区别
        // [Student{name='A', age=35}
        //, Student{name='A', age=21}
        //, Student{name='B', age=23}
        //, Student{name='D', age=25}
        //, Student{name='E', age=12}
        //, Student{name='C', age=15}
        //]
        //Student{name='A', age=35}
        //
        //Student{name='A', age=21}
        //
        //Student{name='B', age=23}
        //
        //Student{name='D', age=25}
        //
        //Student{name='E', age=12}
        //
        //Student{name='C', age=15}

        // Collections.sort方法是配置Comparable接口来用的吗
        // 下面方法报错的。它只接收List。
        //Collections.sort(hashSet);
    }
}
